|
Date : 11, 12 et 23 mai 1991 Protection : MOT DE PASSE Programme : FINAL ORBIT Outils : CARTE PANO_AT, PERISCOPE, QUAID, S-ICE Fichier : XXXV.EXE --> fichier VGA XXXE.EXE --> fichier EGA Temps pass� : 8 HEURES ( quand le d�mon vous prends !) Soci�t� : AFTERSHOCK ENTERTAINMENT Divers : PERISCOPE charg� � 0A9B:0000 SOFT-ICE en DRIVER.SYS Origine : INDONESIE Num�ro : 075 Une approche pas trop difficile puisque au bout de quelques minutes je tombe sur une case m�moire CS:00BE que l'on ne mets pas � zero si la r�ponse est mauvaise avant un RET. Cette case contient 0001. 2A14:420C 2E3B874713 CMP AX,CS:[BX+1347] 2A14:4211 7507 JNZ 421A ---> SAUT � forcer. 2A14:4213 2E CS: 2A14:4214 C706BE000000 MOV WORD PTR [00BE],0000 2A14:421A C3 RET Ce saut forc� en JZ donne 8 vies au jeu. ( alors qu'avec la mauvaise r�ponse on part avec un s�rieux handicap - 0 vie ) Mais de temps en temps je tombe sur une mauvaise surprise comme de ne pas trouver la chaine 75072EC706... dans le ou les fichiers. Deux solutions: 1- le programme est compact�. LZEXE ou EXEPACK. 2- La routine du mot de passe est cod�e. Malheureusement c'est la deuxi�me solution qui est appliqu�e ici. La routine de codage est en clair. ( heureusement ) PERISCOPE est plac� en arr�t sur l'adresse 2A14:4211 avec la commande BM 2A14:4211 2A14:4211 W BA pour valider et GT pour d�marrer...et on attend. Si ma carte PANO fonctionnait sur un 386-33 je n'attendrais pas longtemps, de plus je pourrais imm�diatement m'arr�ter sur le bout de code qui modifie la position m�moire 2A14:4211, mais comme les adresses syst�mes ne sont pas disponibles sur les I/O je n'ai pas le choix, pour l'instant. PERISCOPE s'affiche avec ceci: AX=0013 BX=02FE CX=0000 DX=00F3 SP=0640 BP=0D66 SI=0000 DI=4880 DS=967E ES=29AD SS=98CB CS=967E IP=0338 NV UP EI NG NZ AC PE CY WR ES:4880 = 39 967E:0338 AA STOSB J'ai du mal � retrouver mon CS:IP de 2A14:4211 jusqu'au moment ou je comprends que l'adresse physique ES:4880 est la m�me ! XA 2a14:4210 2E350H XA es:4880 2E350H Je part � la recherche de la provenance de mes octets. AX=079A BX=16CE CX=0001 DX=0069 SP=063E BP=0D67 SI=0000 DI=4881 DS=967E ES=9B40 SS=98CB CS=967E IP=0326 NV UP EI PL NZ NA PO NC RD ES:16CE = 0075 967E:0326 26 ES: 967E:0327 8B07 MOV AX,[BX] Celui-ci est tir� de 9B40:16CE, on dump pour voir... d es:16ce 9B40:16CE 75 00 u. 9B40:16D0 07 95 06 FE FE 00 87 87-00 DB 17 07 F8 F8 00 C3 ...~~....[..xx.C Mais cette chaine est apparement elle-m�me fabriqu�e puisque introuva- ble dans le fichier. Il ne reste plus qu'� d�cortiquer la routine de codage. 23 mai 1991 Repris la chasse avec SOFT-ICE, un petit probl�me comme toujours: retrouver mon CS:4211 puisque forc�ment il ne correspond plus � celui de PERISCOPE. Mais comme avec SOFT-ICE on ne peut pla�er des points d'arr�ts sur les registres ( il eu �t� facile de tester IP avec la valeur 4211 ! ) il m'a fallu tester la touche ENTER au clavier puis remonter. Le code SCAN-CLAVIER de la touche ENTER est 1C � lire � l'adresse 60h en I/O. Finalement mon CS sous SOFT-ICE est 1FB2. Je place SOFT-ICE en arr�t �criture sur l'adresse 1FB2:4210 W eq 13 pour pouvoir d�rouler la "confection" de mon 75 en 4211. De proche en proche j'arrive � retrouver mon 75 en ES:16CE ( ES=9AC0 ) Je continue pour finalement me perdre dans des routines inextricables et dans lesquelles en rempla�ant mon 75 par 74 cel� ne fonctionne plus. Je reviens donc en arri�re et je m'aper�ois que la derni�re position dans laquelle la substitution de 75 par 74 fonctionne est 9AC0:16CE. Je d�cide, si la routine de codage est en clair de faire un CALL dans une zone "COPYRIGHT" et de revenir en ayant d�cr�ment� mon 75 de 1. Il y a plus simple je suis d'accord, mais � d�faut de trouver la bonne piste... et j'ai d�j� perdu trop de temps sur ce p%@!?&*@ de jeu. ( la pelouse m'attend... ) La routine originale est la suivante: 268907 MOV ES:[BX],AX ; 9AC0:16CE = 75 45 INC BP A1A804 MOV AX,[04A8] A ce niveau en d�cr�mentant ES:16CE le soft fonctionne sans mot de passe. Cette routine est en clair, on peut donc la modifier. En d�but du segment CS:0000 on trouve apr�s un JMP une zone DATA comprenant le COPYRIGHT et le nom de la soci�t�. En pla�ant un CALL 3 ( pour pr�server les 3 octets du saut ) Ce n'est qu'apr�s avoir fait un CALL 0 et que tout s'est plant� que j'ai eu l'id�e d'examiner ces trois octets; c'est un JMP !!! alors on y touche pas et on saute 3 octets plus loin. Donc en pla�ant un CALL 0003 � la place de l'instruction MOV AX,[04A8] et en reportant celle-ci dans le CALL cel� devrait marcher. Et en fait cel� fonctionne. Routine modifi�e: 268907 MOV ES:[BX],AX 45 INC BP E8A3FC CALL 0003 Routine pla��e en CS:0003 : IP 0003 26803ECE1675 CMP BYTE PTR ES:[16CE],75 ; [16CE] = 75 ? 0009 � 7505 JNZ 0010 ; si pas 75 on sort. 000B � 26FE0ECE16 DEC BYTE PTR ES:[16CE] ; sinon 75 = 74 et on 0010 � A1A804 MOV AX,[04A8] ; remet l'instruction �cras�e ; par le CALL 3 puis 0013 C3 RET ; on sort. Et le tour est jou�, ouf ! En conclusion SOFT-ICE est plus puissant que PERISCOPE mais il poss�de � mon point de vu deux d�fauts dont un majeur il s'agit de l'impos- sibilit� de pla�er des points d'arr�ts sur les REGISTRES et un d�faut moindre qui est de ne pas poss�der de fonction permettant d'envoyer les sorties �cran dans un fichier. PERISCOPE avec ma carte PANO sur un 286 est plus puissant que SOFT-ICE sans carte PANO sur un 386. Avec PCTOOLS se pla�er en SECTEUR 2, DEP 349 et y mettre: E8 A3 FC puis SECTEUR 1, DEP 3 en �crivant: 26 80 3E CE 16 75 75 05 26 FE 0E CE 16 A1 A8 04 C3 Fichier EGA: XXXE.EXE La modification du secteur 2 est identique mais l'octet 75 n'est plus pla�� en ES:16CE , il se trouve en ES:1887 il faut donc remplacer dans la chaine du secteur 1: CE16 par 8718 ( 2 fois ) FREDDY |